Defines a four-node flat shell element.
The membrane behavior is modeled by the bilinear isoparametric quadrilateral and the bending behavior by the Mindlin-Reissner MITC4 formulation of Bathe and Dvorkin, which uses assumed transverse shear strains tied at the edge midpoints to eliminate shear locking. Both thick and thin shells are supported. Although nominally rectangular, the isoparametric formulation is valid for any flat, convex quadrilateral.
The natural coordinates span , with nodes 1 through 4 located at , , , and , respectively. Nodes should be ordered counter-clockwise when viewed from the positive local -axis; the local -axis is defined by this ordering.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=real64), | public | :: | drilling_factor | = | 1.0d-3 |
The nondimensional drilling-rotation penalty factor . The drilling stiffness is , where is the shear modulus. |
|
| type(material), | public | :: | material |
The material. |
|||
| type(node), | public, | dimension(4) | :: | nodes |
The element nodes. |
||
| real(kind=real64), | public | :: | shear_correction | = | 5.0d0/6.0d0 |
The transverse shear correction factor. This value is only used by elements that include transverse shear deformation. |
|
| real(kind=real64), | public | :: | thickness |
The shell thickness. |
Constructs a new [[rectangular_shell_element]].
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(material), | intent(in) | :: | mat |
The material. |
||
| real(kind=real64), | intent(in) | :: | thickness |
The shell thickness. This value must be positive. |
||
| class(node), | intent(in) | :: | nd1 |
The first node. |
||
| class(node), | intent(in) | :: | nd2 |
The second node. |
||
| class(node), | intent(in) | :: | nd3 |
The third node. |
||
| class(node), | intent(in) | :: | nd4 |
The fourth node. |
The new [[rectangular_shell_element]].
Computes the area of the element.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
The element area.
Computes the 8-by-8 constitutive matrix relating the generalized strains to the stress resultants. where is the shear correction factor and .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
The 8-by-8 constitutive matrix.
Evaluates the i-th bilinear shape function, .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rectangular_shell_element), | intent(in) | :: | this |
The rectangular_shell_element object. |
||
| integer(kind=int32), | intent(in) | :: | i |
The index of the shape function to evaluate. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates . |
The value of the i-th shape function.
Computes the consistent nodal force vector, in the global coordinate system, resulting from a uniform surface traction. Only the translational degrees of freedom receive load.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | q |
The 3-element surface traction vector (force per unit area) expressed in the global coordinate system. For a pressure acting along the local -axis, supply , where is the third row of the local_frame matrix. |
|
| integer(kind=int32), | intent(in), | optional | :: | rule |
The integration rule. This argument is unused and is present for interface compatibility; the element uses the quadrature defined by its integration_rule routine. |
The 6N-element force vector, where N is the number of nodes.
Gets the dimensionality of the element.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
The dimensionality (always 3).
Gets the number of degrees of freedom per node.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
The number of degrees of freedom per node (always 6).
Gets the requested node from the element.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rectangular_shell_element), | intent(in) | :: | this |
The rectangular_shell_element object. |
||
| integer(kind=int32), | intent(in) | :: | i |
The local index of the node to retrieve. |
The requested node.
Gets the number of nodes in the element.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rectangular_shell_element), | intent(in) | :: | this |
The rectangular_shell_element object. |
The number of nodes (always 4).
Returns the natural coordinates of the requested node.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rectangular_shell_element), | intent(in) | :: | this |
The rectangular_shell_element object. |
||
| integer(kind=int32), | intent(in) | :: | i |
The local index of the node. |
The 2-element natural coordinate vector of the node.
Returns the 2-by-2 Gauss quadrature rule.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rectangular_shell_element), | intent(in) | :: | this |
The rectangular_shell_element object. |
||
| real(kind=real64), | intent(out), | allocatable, dimension(:,:) | :: | pts |
The 2-by-4 matrix of integration point natural coordinates. |
|
| real(kind=real64), | intent(out), | allocatable, dimension(:) | :: | wts |
The 4 integration weights. |
Computes the 2-by-2 Jacobian matrix of the mapping from natural to local coordinates.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates at which to evaluate the Jacobian. |
The 2-by-2 Jacobian matrix.
Computes the in-plane nodal coordinates in the element's local coordinate system. Node 1 is located at the local origin.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
An N-by-2 matrix, where N is the number of nodes, containing the local and coordinates of each node.
Computes the direction cosine matrix of the element's local coordinate system. The rows of the matrix are the local , , and unit vectors expressed in global coordinates; therefore, .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
The 3-by-3 direction cosine matrix.
Computes the consistent element mass matrix in the global coordinate system.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| integer(kind=int32), | intent(in), | optional | :: | rule |
The integration rule. This argument is unused and is present for interface compatibility; the element uses the quadrature defined by its integration_rule routine. |
The 6N-by-6N mass matrix, where N is the number of nodes.
Computes the transformation matrix relating the global element displacement vector to the local element displacement vector such that . The matrix is block diagonal with the 3-by-3 direction cosine matrix repeated for the translations and rotations of each node.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
The 6N-by-6N transformation matrix, where N is the number of nodes.
Computes the derivatives of the shape functions with respect to the local and coordinates, .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates at which to evaluate the derivatives. |
A 2-by-N matrix, where N is the number of nodes, containing in the first row and in the second row.
Computes the 6-by-6N shape function matrix interpolating the local nodal quantities with the element's linear (triangle) or bilinear (quadrilateral) shape functions. This interpolation is used to form the mass matrix and the external force vector.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates at which to evaluate the matrix. |
The 6-by-6N shape function matrix, where N is the number of nodes.
Computes the derivatives of the bilinear shape functions with respect to the natural coordinates.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rectangular_shell_element), | intent(in) | :: | this |
The rectangular_shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates . |
The 2-by-4 matrix of derivatives.
Computes the element stiffness matrix in the global coordinate system. The local stiffness matrix is where is the drilling-rotation operator. The global matrix is .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| integer(kind=int32), | intent(in), | optional | :: | rule |
The integration rule. This argument is unused and is present for interface compatibility; the element uses the quadrature defined by its integration_rule routine. |
The 6N-by-6N stiffness matrix, where N is the number of nodes.
Computes the generalized strain vector, in the local coordinate system, at the specified natural coordinate. The components are ordered as .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | displacement |
The 6N-element displacement vector in the global coordinate system, where N is the number of nodes. |
|
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates at which to evaluate the strain. |
The 8-element generalized strain vector.
Computes the 8-by-24 generalized strain-displacement matrix in the local coordinate system. Rows 1-3 contain the bilinear membrane terms, rows 4-6 the Mindlin-Reissner curvature terms, and rows 7-8 the MITC4 assumed transverse shear strains.
The covariant transverse shear strains are sampled at the edge midpoints , , , and and interpolated as and then transformed to local Cartesian components with .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rectangular_shell_element), | intent(in) | :: | this |
The rectangular_shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates . |
The 8-by-24 strain-displacement matrix.
Computes the stress-resultant vector, in the local coordinate system, at the specified natural coordinate. The components are ordered as . The surface stresses may be recovered as .
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(shell_element), | intent(in) | :: | this |
The shell_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | displacement |
The 6N-element displacement vector in the global coordinate system, where N is the number of nodes. |
|
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinates at which to evaluate the stress resultants. |
The 8-element stress-resultant vector.